/* CoralCube | Massively Multiplayer Online Role-Playing Game(MMORPG) Emulator.
|* 
|* Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
|*               2008-2010 TrinityCore <http://www.trinitycore.org/>
|*               2008-2010 CoralCube <http://www.CoralCube.com/>
|*
|* This program is free software. You can redistribute it and/or modify it under the terms of 
|* the GNU General Public License as published by the Free Software Foundation, either 
|* version 2 of the License.
|*
|* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, 
|* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
|* See the GNU General Public License for more details.
|*
|* You should have received a copy of the GNU General Public License along with this program. 
|* If not, see <http://www.gnu.org/licenses/>.
|*/

/* ScriptData
SDName: Npc_Innkeeper
SDAuthor: WarHead
SD%Complete: 99%
SDComment: Complete
SDCategory: NPCs
EndScriptData */

#include "ScriptPCH.h"

#define HALLOWEEN_EVENTID       12
#define SPELL_TRICK_OR_TREATED  24755
#define SPELL_TREAT             24715

#define LOCALE_TRICK_OR_TREAT_0 "Trick or Treat!"
#define LOCALE_TRICK_OR_TREAT_2 "Des bonbons ou des blagues!"
#define LOCALE_TRICK_OR_TREAT_3 "Süßes oder Saures!"
#define LOCALE_TRICK_OR_TREAT_6 "¡Truco o trato!"

#define LOCALE_INNKEEPER_0 "Make this inn my home."
#define LOCALE_INNKEEPER_3 "Ich möchte dieses Gasthaus zu meinem Heimatort machen."

class npc_innkeeper : public CreatureScript
{
public:
    npc_innkeeper() : CreatureScript("npc_innkeeper") { }

    bool OnGossipHello(Player *pPlayer, Creature *pCreature)
    {
        if (IsEventActive(HALLOWEEN_EVENTID) && !pPlayer->HasAura(SPELL_TRICK_OR_TREATED))
        {
            const char* localizedEntry;
            switch (pPlayer->GetSession()->GetSessionDbcLocale())
            {
            case LOCALE_frFR: 
                localizedEntry = LOCALE_TRICK_OR_TREAT_2; 
                break;
            case LOCALE_deDE: 
                localizedEntry = LOCALE_TRICK_OR_TREAT_3; 
                break;
            case LOCALE_esES: 
                localizedEntry = LOCALE_TRICK_OR_TREAT_6; 
                break;
            case LOCALE_enUS: 
            default: localizedEntry = LOCALE_TRICK_OR_TREAT_0;
            }
            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, localizedEntry, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+HALLOWEEN_EVENTID);
        }

        if (pCreature->isQuestGiver())
            pPlayer->PrepareQuestMenu(pCreature->GetGUID());

        if (pCreature->isVendor())
            pPlayer->ADD_GOSSIP_ITEM_ID(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);

        if (pCreature->isInnkeeper())
        {
            const char* localizedEntry;
            switch (pPlayer->GetSession()->GetSessionDbcLocale())
            {
            case LOCALE_deDE: 
                localizedEntry = LOCALE_INNKEEPER_3; 
                break;
            case LOCALE_enUS: 
            default: 
                localizedEntry = LOCALE_INNKEEPER_0;
            }
            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, localizedEntry, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INN);
        }

        pPlayer->TalkedToCreature(pCreature->GetEntry(), pCreature->GetGUID());
        pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
        return true;
    }

    bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
    {
        pPlayer->PlayerTalkClass->ClearMenus();
        if (uiAction == GOSSIP_ACTION_INFO_DEF+HALLOWEEN_EVENTID && IsEventActive(HALLOWEEN_EVENTID) && !pPlayer->HasAura(SPELL_TRICK_OR_TREATED))
        {
            pPlayer->CastSpell(pPlayer, SPELL_TRICK_OR_TREATED, true);

            if (urand(0, 1))
                pPlayer->CastSpell(pPlayer, SPELL_TREAT, true);
            else
            {
                uint32 trickspell = 0;
                switch (urand(0, 13))
                {
                case 0: 
                    trickspell = 24753; 
                    break; // cannot cast, random 30sec
                case 1: 
                    trickspell = 24713; 
                    break; // lepper gnome costume
                case 2: 
                    trickspell = 24735; 
                    break; // male ghost costume
                case 3: 
                    trickspell = 24736; 
                    break; // female ghostcostume
                case 4: 
                    trickspell = 24710; 
                    break; // male ninja costume
                case 5: 
                    trickspell = 24711; 
                    break; // female ninja costume
                case 6: 
                    trickspell = 24708; 
                    break; // male pirate costume
                case 7: 
                    trickspell = 24709; 
                    break; // female pirate costume
                case 8: 
                    trickspell = 24723; 
                    break; // skeleton costume
                case 9: 
                    trickspell = 24753; 
                    break; // Trick
                case 10: 
                    trickspell = 24924; 
                    break; // Hallow's End Candy
                case 11: 
                    trickspell = 24925; 
                    break; // Hallow's End Candy
                case 12: 
                    trickspell = 24926; 
                    break; // Hallow's End Candy
                case 13: 
                    trickspell = 24927; 
                    break; // Hallow's End Candy
                }
                pPlayer->CastSpell(pPlayer, trickspell, true);
            }
            pPlayer->CLOSE_GOSSIP_MENU();
            return true;
        }

        pPlayer->CLOSE_GOSSIP_MENU();

        switch (uiAction)
        {
        case GOSSIP_ACTION_TRADE: 
            pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); 
            break;
        case GOSSIP_ACTION_INN: 
            pPlayer->SetBindPoint(pCreature->GetGUID()); 
            break;
        }
        return true;
    }
};

void AddSC_npc_innkeeper()
{
    new npc_innkeeper();
}
